🎖️GitЯра🎖️
Branches (587)
44ae9fb: fix(ci): update remaining app: task refs to androidApp:
4189035: fix(ci): remove emoji screenshot tests (cross-platform font rendering)
06f2b64: fix: resolve detekt and compilation errors in air quality metrics
1a312f8: feat(messaging): inline markdown styling with iOS parity
20db556: Move icon SVGs from resources to packaging/icons
ed19202: docs: release CHANGELOG.md for v2.8.0
bd80248: docs: update CHANGELOG.md
89259b3: fix(car): drop CarAppService from production manifests to satisfy Play car-app review
5c0373d: fix(deps): update mqttastic to v0.8.1
a9bc133: fix(deps): update takpacket-sdk to v0.9.0
aa165c8: chore(linux): update release version to 2.8.1 in metainfo.xml
c7fc4b5: chore(ci): drop setup job, rebalance test shards, move coverage to main
9173aa7: fix(ci): fail closed and paginate run discovery in pr-closed-cleanup
f1d42b9: fix: rethrow CancellationException in suspend catch blocks Three suspend functions in BleRadioTransport caught Exception without rethrowing CancellationException, which could silently swallow coroutine cancellation: - findDevice(): scan retry loop would continue even after cancellation - attemptConnection(): bond() failure handler swallowed cancellation - onConnected(): RSSI read failure handler swallowed cancellation Also replace runCatching with safeCatching in two suspend contexts: - RadioConfigViewModel.probeMqttConnection() - LegacyDfuTransport DFU version read Per project rules: use safeCatching in coroutine/suspend contexts, keep runCatching only in cleanup/teardown or non-suspend code.
b985985: chore(ci): address review — wrapper retries, artifact pagination, env boundaries, private workdir
359761e: chore(ci): gitignore JVM crash dumps
aa5cb17: perf(docs): skip Dokka when no API sources changed, drop test modules from aggregation
648d112: chore(build): bump flatpak-sources plugin to 0.1.7, drop Isolated Projects workaround
88f0522: refactor: Set minSdk to 32 and remove legacy code
1353ba2: feat(docs-sync): prune stale pages and own the section category
9ff4774: chore(deps): remove unused osmdroid-geopackage dependency
809af8d: fix(lora): re-repair the adopted fresh-setup default
fe46acf: fix(lora): keep the preset picker unconstrained while region is unset
533d174: feat(lora): default US region to LongTurbo preset
4c0c30d: chore(lora): pin protobufs to commit snapshot v2.7.26-497cd88-SNAPSHOT
8eb0578: ci(desktop): dispatch winget-publish explicitly from production promotion
4aba9cd: test: pin ModemPreset->channel-name contract; drop vacuous name check
c80d0eb: refactor(map): migrate custom overlays to the maps-utils 5.0 data layer
c4a688d: fix(review): harden Chirpy request failures and tile-cache purge
f2a08ff: fix(notifications): harden shortcut labels and on-demand pruning per review
e1924c3: fix(aqi): scope NowCast min-data gate to recent 3h; recompute on time
e015f09: fix(service): unwedge the inbound pipeline behind stale-Connected zombies
16bfb0c: fix(node): chart local-node air-quality telemetry (orphaning + zero-suppression)
f363f66: chore(claude): history-driven tooling hardening — subagent tripwire, pitfall warnings, hook fixes, PR/triage skills
3f46e86: fix(analytics): restore Datadog RUM network tracking (google) and unify service name
a873f64: fix: dedup node lists to prevent LazyColumn duplicate-key crash
614aa7d: fix(build): supply AboutLibraries license texts for offline builds
26d540e: fix(nav): don't warn on legacy /e/ and /v/ import links in route()
3883667: fix(konsist): anchor path rules to the scanned checkout root
aeb074e: docs: de-submodule protos, sync constitution to v1.3.3, prune stale governance refs
fb056da: fix(connections): fall back to advertised name for blank long names
683b233: chore(coderabbit): align review config with a problems-only contract
301aa41: test(node): give the compass lifecycle waits a CI-sized budget
33d5401: fix(ci): prove the baseline profile came from the current run
92909d9: fix(widget): remove Glance's crash-on-launch ActionTrampolineActivity
a216378: fix: address CodeRabbit review on waypoint geofences
e2c2a80: test: update node-metrics screenshot goldens for typography fix
d33fdb1: feat: distinguish saved coverage estimates in the map layers sheet
bbc0bae: feat(event): DEF CON 34 logo and full brand palette in event theming
c13687b: feat(demo): make Demo Mode reachable and populated in release builds
b0fc7c6: fix(desktop): treat oversized version components as unparseable
779bf4f: fix(desktop): pin Compose packaging javaHome to the JBR toolchain
8453071: fix(desktop): exclude AltGr from Ctrl shortcuts, import KeyEvent
ab1c7dd: style: spotless reformat of TileCaches
9dc11db: fix(firmware): recover interrupted legacy DFU sessions; guide to USB on stock
71a11b9: chore(service): type-neutral log for the exhausted foreground-type fallback
ac8ea6e: docs: full documentation audit for the 2.8.0 release
c6585f3: docs: address CodeRabbit review on #6150
2e19c9d: fix(discovery): let default-channel users start a scan
4efce5b: test(connections): prove the viewmodel forwards replay visibility
004a512: perf(analytics): match iOS Datadog RUM monitoring, drop dead timber dep
decc497: test(messaging): cover collapse-state toggle + SavedStateHandle restore
b029602: style: spotless formatting for DbFlowRecoveryTest
5f4448c: fix: rename :baselineProfile module to lowercase :baselineprofile
75e2444: fix(desktop): create the proto DataStore directory before first use
d873e1e: fix(prefs): make the event node-event default a single atomic update
f955ed2: refactor: make the event-fonts toggle row fully toggleable (a11y)
4a648d8: chore: stop tracking the craft workpad scratch file
d6febc2: test(database): assert reaction list length, not just uniqueness
a8e61e0: fix(messaging): carry absent snr through to the UI instead of 0 dB
8314962: fix(discovery): address CodeRabbit review on mesh beacon PR
5b111c1: fix(database): fail fast on a pool that wedge recovery refused to replace
d3cdf03: fix(test): stop leaked coroutine scopes poisoning tests
b4eafa4: test(qr): tighten admin-packet count assertion; scope cache-claim wording (review)
7955858: refactor(firmware): coerce alpha from cached stable row, not a combined flow
2a642fa: fix(mqtt): log throwable-less client errors at warn
1fffa0b: test(node): isolate the packet id in the signed-key test
67ebbec: copy(settings): match non-signing licensed warning to two sentences
93195d4: fix(screenshots): use text placeholders in the narrow actions-sheet golden
94a5070: test(ui): pin emoji cell sizing in a unit test, not a screenshot golden
3cdb72e: docs(workpad): record PR #5851
079ff19: ci(widget): wire :feature:widget unit tests into the shard-app test shard
342a5f8: fix(icons): differentiate google/fdroid debug launcher icons
41b6510: build: apply gradle/kotlin best-practices audit fixes
bf9b765: test(ble): address review — fix test-dispatcher wiring, drop dead helpers, add cases
9214285: refactor(car): drop dead FuzzyNodeNameResolver duplicate
542a9d2: fix(settings): crash opening Position config (rememberSaveable Position)
b355311: fix(notifications): dismiss conversation on Android Auto reply + clean up group summary
891af2e: fix(messaging): make the send-ack timeout atomic and one-per-packet
d9856e2: test: cover Import, Import/Export, and expanded Close FAB content descriptions
94253e1: chore(car): trim redundant R8 keep rules (dedup Koin, narrow CarAppService)
7ffdb7f: refactor: drop two over-engineered seams (enum + stdlib Base64)
4c1556c: test(database): exercise the Room migration chain in CI
3b6d028: feat(export): add hop start and relay node columns to CSV export
decf13f: style: apply spotless formatting
498ff92: ci(desktop): authenticate setup-java in verify-flatpak to dodge API rate limits
04aae4f: fix(ui): keep transient signed/decimal input in numeric preferences
59e5f04: fix(nfc): report failure on missing adapter and catch FormatException
d5b24d8: feat(map): expose advanced Site Planner params + prefill from device config
4f29c4f: fix(ui): restore bottom time-axis height at large font scales
8ef67ba: feat(node): show our node shortname chip on the Nodes tab
1870bce: test: make the resource warm-up best-effort
b4f09c8: fix(firmware): address CodeRabbit review — zip-fallback error contract, nightly recovery unlock; rename ExcludedModulesUnlock to HiddenFeaturesUnlock
cc73a9e: fix(map): clear the broadcast opt-in when eligibility is lost
305a04a: test(compose): preserve cancellation in the resource warm-up
91511f6: docs(settings): clarify captureAppLogcat comment (#6053)
360c669: fix(ui): add MQTT context to channel uplink/downlink toggle labels
47f1314: refactor(node): address review — merge hop-bar a11y, reuse all_time
0e33451: feat(node): show CO₂ sensor temperature & humidity on Air Quality page
e0892b1: feat(map): F-Droid map-layer parity — shared layer stack + OSMdroid overlay render (#6138)
dbab26b: fix(build): suppress Datadog compiler SourceLines annotation for google release R8
8f12349: fix(firmware): bound the CDC-unblock permission wait, avoid first() on an empty flow
49b92b0: style(messaging): more body-text breathing room; transport icon leads diagnostics
1de9559: fix: F-Droid ApiService compile break + review hardening
a1ae97f: docs: record Kotlin 2.4 cleanup session in agent memory
def8f05: fix(mqtt): localize proxy error messages via core:resources
5ba413a: feat(lora): gate region→preset map + TINY presets on firmware capability
a6a8199: test: regenerate screenshot goldens for satellite-chip removal
c33b3cb: fix(data): don't mark ignored empty link payloads fresh; single-flight stale link refreshes
e142007: ci: harden snapshot job per review
dfba71a: test(settings): cover saveNodeDbJson and refresh persistence screenshots
6108026: test(node): cover rounding boundary for kmhIn imperial conversion
e13c87f: fix(node): chart environment metrics in the user's display units
4f5d7a6: fix(appfunctions): keep AppSearch document-factory constructors under R8 full mode
db305bd: docs: match the config-site file to what we submitted upstream
5235bf4: fix: keep cached data flowing when api.meshtastic.org is down
e8c3186: fix(firmware): anonymize device address in post-update reconnect logs
67c7bdd: fix(network): publish framing desync count with a visibility guarantee
74b6aac: fix(data): don't drop ERRNO_SHOULD_RELEASE responses when TX queue is full
2a81598: fix: Site Planner map/camera parity with iOS
b06bed5: 🐛 fix: include all NodeChip inputs in traceroute marker keys
9b1c4db: test: activate dead NodeInfoDao tests
43f16c7: fix: adopt 2024 EPA PM2.5 AQI breakpoints for cross-platform alignment
035315d: fix(r8): dontwarn kotlinx.parcelize.Parcelize referenced by Kable
05e209f: refactor(firmware): dedupe BLE/DFU OTA transport + handler boilerplate
7296cdf: refactor(node): drop unstamped packets before the signal time axis
a5c656c: style(discovery): reflow MeshBeaconRepository KDoc (spotless)
9a8b5ba: fix(desktop): skip cask update for tags predating the template
fceadc4: fix: clarify event firmware schema description (auto-fix from review)
e984ce8: docs(mqtt): correct probe() tlsEnabled KDoc transport scheme
0119db7: fix(discovery): restore radio home config after an interrupted scan
f93a003: ci(release): prevent Play submission churn and review-clock resets
3aeefb6: fix(ci): don't let dangling-tag lookup failures hide behind grep's || true
261a0f9: fix(settings): show REDACTED for a remote node's private key
c905c7f: refactor(car)!: remove the Android Auto integration from all build variants
2c16814: fix(discovery): wrap button+reason in Column to satisfy MultipleEmitters
218ec0c: Revert "feat(map): send a waypoint as a DM or to a specific channel (#6218)"
b8810c0: fix: address 2.8.0 release-audit findings
4d94dc2: feat(settings): add remote "Set time" admin action
a6b9713: fix(service): stop blocking getString on Dispatchers.Default-reachable notification paths
4dbc555: test(settings): pin exact base64 in backup key assertion
e4a4c83: fix(connections): send set_time_only at MyNodeInfo instead of onNodeDbReady
8065095: fix(logs): Allow access to DebugPanel Logs while disconnected
cdce842: fix: address CodeRabbit review feedback on connections deep link
df1f846: fix(build): sign debug builds with a shared checked-in keystore
93f54c0: feat(messaging): @mention with deep-link to node detail (#6098)
670925d: test: harden the GC regression guard per review
4ba804e: Merge release/2.8.0 into msh.to-device-links (#5714)
19cf151: fix(desktop): implement new NotificationPrefs members in test fake
3d66abc: feat(mqtt): add phone-local proxy cutoff control
42dd6d9: feat(node): add Traffic Management telemetry chart
aba8034: fix(takserver): match Apple's upper-case CoT uid so nodes don't duplicate in ATAK
89e285a: fix(network): migrate to mqtt-client 0.4.0 (IP-literal TLS fix)
a5e6d9f: fix: keep node-mute authoritative over @mentions
97db114: fix(node): localize channel-qualified metric card labels
ade5b43: fix(service): isolate per-packet failures in the receive pipeline
a48a28d: refactor: decouple wind/rainfall units from temperature flag
9284c23: fix(node): stop metric-card trailing values crushing to one-char-per-line
918e5ff: chore(tooling): gate git push on detekt in pre-bash-guard hook
906b3ec: fix(messaging): align status wording with design#43 source-of-truth
b6e38f2: feat(analytics): restore RUM view tracking on Nav3 (Google flavor)
7785c1c: fix(waypoint): reject non-owner modification of a stored locked waypoint
be4ae09: fix(i18n): localize emoji picker strings
519a139: feat: add on-device translation for chat messages (google flavor)
0f1075a: refactor(node): share power-channel label merge to avoid fake/DAO drift
af7e656: fix(ble): enable Kable preConflate to prevent scan-callback ANRs
033985c: style: spotlessApply PersonIconFactory KDoc wrapping
228d872: feat(connections): unified device list, ACCESS_LOCAL_NETWORK, transport filter chips (#5219)
fbca325: docs: update CHANGELOG.md (#5262)
b1b3f37: docs: address review feedback on settings-validation.md
1896970: chore(release): add release-please pilot and versioning standards
77be46d: style: apply spotless formatting
a2fcbcd: Upgrade takpacket-sdk to version 0.3.0
0b97cb3: ci: add 'desktop' to required PR labels list
1f66dbf: docs(screenshots): fix in-app image pipeline, single-source assets, add 2.8.0 feature screenshots
42f311d: docs: generate Obtainium deep links instead of telling readers to run a script
035f42a: fix(docs): add missing CoreRes accessor imports for Widget/Help pages
c81b113: fix(strings): remove stray "to" in share location description
2897b8b: fix(screenshots): increase threshold for cross-platform rendering
6dc53cb: fix(node): address review feedback on metric card columns
73e3fbe: fix(database): dispatch cache count to IO, guard against stale selections
4f90acb: fix(node): grow session membership as nodes are heard mid-session
4f53afd: fix(node): address CodeRabbit review on AQI metrics log
a74d5d4: feat(core): implement batched node info handling for mesh handshake
b7d6b9c: test(a11y): prove all status colors reach AA on every bubble shade
b5cae14: feat(service): Companion Device Manager associations for BLE radios (Phase 1)
40d5302: feat(service): CDM presence — restart MeshService when the radio reappears (Phase 2)
a76d5ee: feat(desktop): add Conveyor packaging for cross-platform distribution
bbf662b: Merge release/2.8.0 into discovery (#5275)
a54be79: fix: use BundledSQLiteDriver for FTS5 support in Robolectric tests
a326a87: test(model): assert ITU3 slot counts
52e0462: fix: address review triage — transition-based ham routing, local-only guard, callsign guidance
e8d6647: Add unit tests for SdkPacketHandler, SdkRadioInterfaceService, and SdkRadioController edge cases
27845b9: fix(messaging): address review feedback on translation feature
896d582: Fix literal backslash in NFC write-failure message
c099d5c: docs(spec): align node-list spec with current implementation
d11af85: refactor(proto): use Wire native emitAppliedOptions, delete custom SchemaHandler The upstream proto (meshtastic/protobufs#905) has been simplified to use a scalar bool extension instead of a message wrapper: [(meshtastic.diy_only) = true] Wire 6's emitAppliedOptions now natively generates @DiyOnlyOption(true) annotations on fields, eliminating the need for our custom FieldMetadataSchemaHandler. Changes: - Delete FieldMetadataSchemaHandler.kt (~200 LOC) - Remove wire-schema dependency from build-logic - Remove custom {} handler block from core:proto build - Add emitAppliedOptions = true to Wire kotlin {} config - Update FieldMetadataDemo to demonstrate the native annotation - Bump protobufs submodule to metadata-experiment branch
34ee2f8: feat(lora): add MEDIUM_TURBO modem preset; fix protobufs Renovate downgrade loop
97efcca: refactor(remote-shell): use proto fields for replay/heartbeat metadata
315a507: fix import
bdb01a2: test(ui): MQTT badge content description is now "MQTT" not "via MQTT"
5b33b8b: refactor(tak): localize channel option labels via string resource
94b513a: fix(node): treat opting out of unknown nodes as an active filter
dddba07: feat(database): enable WAL connection pool for parallel reads
2baee1e: fix(security): make XEdDSA signing shield green & prominent
137f008: feat(map): add own-track breadcrumb trail with show/hide toggle and GPX export
f9cdc3b: Merge branch 'release/2.8.0' into pr5633
aed1c42: chore(map): bump MapLibre Compose to 0.13.0, light up desktop base map, drop Google Maps leftovers
1ea87db: Rename from Tak centric to "Lockdown" mode
fac24a1: Merge branch 'main' into features/lockdown-v2
bb58344: fix(channels): serialize clearChannelSet through writeMutex
77ecde6: fix: disable preference footer buttons when there are no unsaved changes
077ac1e: fix: prompt to confirm discarding unsaved changes in config screens
85fd48b: fix(database): drain source writers before merging (per-source barrier)
6fc885d: test(node): tighten node-count preview fixtures
108b847: test(data): pin precision retention in coarse-position regression tests
7ef2d3b: fix(model): gate TAK module config on firmware 2.8.0
9b9ac46: fix(debug): restore node ID hex annotations broken by the Wire migration
ef6f753: test(screenshot): regenerate TAK test card goldens for two-section layout
cd58910: fix(settings): navigate directly from LoRa modem preset tap
c44dbea: test(ble): tighten negative-control assertion to match its own comment
b9612b2: fix(node): survive configuration change for clear-track confirmation dialog
201db0d: fix(node): make node-list search case-insensitive for non-ASCII names
cab47c1: fix(ui): honor a11y touch-target size for the pane drag handle
dc41291: fix(ci): align release.yml labels with actual repo labels
cb6dc96: feat(docs): upgrade Chirpy assistant with streaming and live diagnostics
e2a6ea3: auto: .remember 11:34
46a886d: fix(notifications): guard blank conversation-shortcut labels
7602c3d: Fix spotless violations in crash cleanup changes
46a9efe: fix(logging): keep cancellation visible in Datadog
928b15b: test(desktop): use runTest backgroundScope for the dispatch test
e187b2a: test(ble): assert emitted addresses, not just emission count
1ad3a3c: fix(desktop): make the shutdown path reachable — application() was exiting the JVM itself
6673cd1: ci: restrict Develocity cache writes to trusted events
53a0210: fix(build): declare navigationevent-compose explicitly, fixing Dokka's metadata compile
113121c: fix(map): restore osmbonuspack native styling, fix tile-scaling gap
60bd655: fix(firmware): add fallback painter to device hardware image
064d69c: fix(firmware): log blank firmware versions as UNKNOWN instead of skipping
280eaad: refactor(flatpak): retire heuristic cache scanner, adopt build-ops capture
e8a7d8b: fix(build): track compose-multiplatform's actual version in the flatpak arm64 force-resolve
3222a8c: fix(verify-flatpak): bundle gradle-9.5.1-all, rewrite wrapper URL
e45ee17: fix(ai): read the real inference source instead of hardcoding it
36bacd8: fix(connections): gate manual + recent TCP connects on ACCESS_LOCAL_NETWORK
47d6082: fix(service): warn and still connect — never block — when local-network access is missing
ad3a276: fix: derive temperature unit from locale temperature preference, not distance system
52e8dcc: fix(network): avoid double-bracketing IPv6 mDNS addresses
252e6ab: fix(data): stop "1 hour" log retention from wiping the MeshLog table
b74b011: Rename Desktop application to 'Meshtastic Desktop'
55432cf: fix(ui): prevent duplicate LazyColumn keys in node metrics logs
542e8be: Fix Kotlin/Native test compile: drop parentheses from test names
6db03e6: fix(discovery): carry rssi presence through to discovery persistence
7b45f84: fix(ui): request HIGH error correction for generated QR codes
dcc9447: fix: resolve release/2.8.0 branch-review findings
85745f6: map: remove manual ViewTree lifecycle owner workarounds
db65a65: fix(test): isolate androidApp unit tests from the production Application
7b1c96b: Merge branch 'main' into fix/tak-dedup-duplicate-cot
f970ad6: fix(takserver): emit *:-1:stcp contact endpoint so directed TAK-Talk/GeoChat routes over the mesh; SDK v0.5.1
4b9c1de: fix(tak): re-encode bundled .p12 certs with legacy PKCS#12 algorithms
63ad902: feat(settings): warn when TAK bridging falls back to the legacy v1 path
f0002ca: fix(takserver): don't log remarks-stripped success on a dropped packet
f8cdad9: Update language handling and migration to AppCompatActivity
ce2ea49: Fix literal backslashes in strings with escaped apostrophes
22be6f6: fix(build): close the secrets properties stream after load
f885805: fix(barcode): narrow the F-Droid scanner to QR-only
60f6ee5: docs: publish channels: main api
e48c394: Rename Desktop application to 'Meshtastic Desktop' (#5677)
ccf984e: feat: replace LoRa bandwidth text input with constrained dropdown (#5687)
be6f2cf: fix(map): remove manual ViewTree lifecycle owner workarounds (#5704)
4a0eeae: chore(deps): update fastlane to v2.236.1 (#5772)
f8cdd3d: chore(deps): update koin to v4.2.2 (#5797)
1250e96: chore(deps): update kotest to v6.2.0 (#5799)
d641d92: chore(deps): update spotless to v8.7.0 (#5802)
4c266e5: fix(service): resolve selected-device startup race (#5828)
4e7e4c3: test(ble): add Robolectric coverage for the bonding-interruption fix (#5849) (#5850)
18d402b: chore: Claude Code tooling, Konsist commonMain boundary guard, and R8 keep-rule cleanup (#5859)
5dd9d57: fix(settings): crash opening Position radio-config screen (#5862)
63dbbdd: fix(data): separate refresh timeouts from Room persistence (#5881)
b692670: fix(firmware): harden ESP32 OTA + nRF DFU update paths (hardware-validated) (#5915)
56f522c: refactor(firmware): dedupe BLE/DFU OTA transport + handler boilerplate (#5918)
468869b: chore(deps): update org.meshtastic:protobufs to v2.7.26-21879a9-snapshot (#5938)
d81a91a: feat(lora): gate region→preset map + TINY presets on firmware capability (#5941)
09cde67: fix(usb): Surface permission denial as permanent disconnect (#5943)
1ee0572: refactor(ble): Make Kable connect fallback explicitly bounded (#5944)
ab07347: refactor: drop two over-engineered seams (enum + stdlib Base64) (#5945)
db1f331: chore(deps): update aboutlibraries to v15.0.2 (#5953)
3b09b6a: chore(deps): update com.google.android.gms:play-services-location to v21.4.0 (#5954)
e8fb0d3: ci: fix Android docs sync (remove stray workflow, prune stale pages) (#5955)
fe019d3: fix(ble): Bound Android bonding wait (#5967)
5c83333: fix(ble): Avoid duplicate bonding retries after pairing failure (#5969)
86580db: fix(ble): Stop transport connect after failed bonding (#5973)
03009c4: Prevent Range Test from running on public/default channel (#5986)
b913d95: chore(tooling): gate git push on detekt in pre-bash-guard hook (#5993)
e286672: chore: Scheduled updates (Firmware, Hardware, Translations, Graphs, Baseline) (#6002)
216c552: feat(lora): default US region to LongTurbo preset (#6009)
ce1a9fc: fix(firmware): repair nRF USB firmware update and post-update reconnect (#6018)
4f8aced: fix(ble): Handle scan registration failure (#6019)
55ea28b: fix(discovery): show disabled reason below Start Analysis button (#6027)
33d8d52: feat: NFC tag writing for shared contacts and channels (#6030)
60119ce: feat(connections): add deep link to trigger a connection by address (#6036)
f57cf73: fix(qr): Stabilize scanner lifecycle and imports (#6040)
75ba819: feat(discovery): surface received Mesh Beacon invitations (#6043)
9ed656c: fix(messages): Refresh channel placeholders after updates (#6054)
433f63b: feat(settings): view & export app debug logs in-app (#6055)
4ea8736: feat(settings): view & export app debug logs in-app (#6055)
5db3a2a: fix(qr): Filter duplicate ADD imports (#6056)
15bb763: fix(data): stale firmware/hardware caches — stop cancelling slow API refreshes, prune pulled releases, seed from newer bundles (#6060)
d6eceab: fix(settings): Generate fresh PSK for named manual channels (#6076)
4a9f85b: feat(database): unify device database across transports (#6096)
1dce09f: feat: compute EPA NowCast AQI from PM2.5 history (#6102)
380b987: feat: compute EPA NowCast AQI from PM2.5 history (#6102)
2fa0abd: Add secure key backup/restore/delete for security config (#6105)
f380737: fix(discovery): let default-channel users start a scan (#6120)
e12c4a5: fix(runtime): harden BLE profile, OTA setup, and DB access (#6126)
5ee5a5b: Align Android message status wording (#6133)
e552b06: feat(node): histogram of nodes per hop distance (#5745) (#6146)
d2c13b6: feat(map): F-Droid map-layer parity — share layer UI + logic in common source (#6138) (#6148)
0816581: Promote CO2 temperatures to summary if no other temp is present. (#6153)
1a43524: chore: Scheduled updates (Firmware, Hardware, Translations) (#6156)
bbc85dc: feat(ble): update kable-core to v0.44.0 + surface missing-permission scan failures (#6165)
347475a: fix(ble): refresh GATT cache around ESP32 OTA profile changes (#6166)
9aa66ab: fix(ble): refresh GATT cache around ESP32 OTA profile changes (#6166)
d9c4bff: chore: Scheduled updates (Firmware, Hardware, Translations) (#6168)
337a415: chore: Scheduled updates (Firmware, Hardware, Translations) (#6168)
8d77552: refactor(qr): apply channel imports atomically via edit-settings transaction (#6170)
a2ecbd0: refactor(qr): apply channel imports atomically via edit-settings transaction (#6170)
2b801c2: perf(mqtt): drop payload-less client-proxy downlinks before forwarding (#6171)
b5ce69e: feat(settings): add packet authenticity policy (#6178)
3a7ad1c: fix: keep node-mute authoritative over @mentions (#6190)
1d91a9f: fix(service): route notification quick-replies through the send pipeline; drop dead parcelize plugin (#6196)
860f906: feat(messaging): inline markdown styling (iOS parity) (#6234)
7235ee9: chore: Scheduled updates (Graphs, Baseline Profile) (#6237)
842436d: Fix: add back navigation to Clean Node Database screen (#6264)
832cdb7: fix(build): suppress Datadog compiler SourceLines annotation for google release R8 (#6292)
1f8925a: chore: Scheduled updates (Firmware, Hardware, Translations) (#6314)
120e31c: chore: Scheduled updates (Firmware, Hardware, Translations) (#6314)
3c20272: Remove Ukraine 868MHz region code (#6315)
5b939fb: fix: align channel QR share contract (#6325)
628c7aa: fix: align channel QR share contract (#6325)
82e5da1: fix: make NotificationManager.dispatch await the platform send (#6326)
09de0cd: fix: make NotificationManager.dispatch await the platform send (#6326)
2c1a75b: Align NFC contact import and share dialogs with Design Standards v1.4 (#6332)
71c1131: Align NFC contact import and share dialogs with Design Standards v1.4 (#6332)
d5ff8f7: Align NFC contact import and share dialogs with Design Standards v1.4 (#6332)
1b93769: fix: keep cached data flowing when api.meshtastic.org is down (#6335)
137a85a: chore: Scheduled updates (Firmware, Hardware, Translations) (#6340)
2ea50d5: fix(waypoint): reject non-owner modification of a stored locked waypoint (#6348)
ae7c18d: fix(nav): register /wifi-provision and /discovery as https App Links (#6365)
49165fc: feat(messaging): redesign message bubbles toward the M3 conversation pattern (#6368)
2658271: fix(node): stop metric-card trailing values crushing to one-char-per-line (#6374)
2140840: chore(deps): update agp to v9.3.1 (#6386)
d078857: chore(deps): update com.android.tools:common to v32.3.1 (#6387)
9c864a8: chore: Scheduled updates (Firmware, Hardware, Translations) (#6396)
c563814: fix(android): avoid resource stalls in connection status (#6398)
8cf8214: fix(hardware): throttle repeated catalog refreshes for cache misses (#6399)
500ab7a: fix(firmware): decode manifests independent of content type (#6400)
00994c0: fix(ci): defer desktop packaging toolchain resolution (#6401)
21966ff: test(firmware): synchronize OTA preflight confirmation (#6402)
3dfc8ae: chore: Scheduled updates (Firmware, Hardware, Translations) (#6404)
f28da4e: fix(firmware): don't treat unparseable version as "too old" (#3726) (#6408)
09f27b3: fix(channels): store channel set per-device to stop cross-device duplicates (#4623) (#6409)
d1d44f8: chore: Scheduled updates (Firmware, Hardware, Translations) (#6429)
a4be81c: feat(node): group related metric cards into vertical columns (#6431)
237c067: fix(data): don't let coarse position reports overwrite precise coordinates (#6432)
d9b9ce6: fix(node): show node counts without truncation (#6433)
5572b29: fix(model): gate TAK module config on firmware 2.8.0 (#6435)
2d63db8: fix(mqtt): scope user-CA trust to the MQTT connection (#6464)
c9e0366: fix(widget): remove Glance's crash-on-launch ActionTrampolineActivity (#6467)
70e9230: fix(map): stop reporting cancelled layer loads as errors (#6468)
e2b59b5: fix(network): resync stream framing and stop reporting expected disconnects as errors (#6469)
5235b8f: fix(logging): stop reporting expected conditions as crashes (#6470)
ddc9999: fix(service): guarantee startForeground is reached or MeshService stops itself (#6471)
6599331: fix(notifications): guard blank conversation-shortcut labels (#6472)
51d1793: feat(widget): Glance error UI, documented resource bridge, and widget tests (#6473)
72ca331: fix(node): disambiguate signal-log packet keys (#6492)
b49b2a7: fix(mqtt): log throwable-less client errors at warn (#6493)
d714b22: chore(deps): bump protobufs to 2.7.26.140 (optional rx_time) (#6510)
2d20cd8: fix(ui): give rx_snr real presence semantics end to end (#6523)
19bb682: feat(firmware): add nRF52/RP2040 factory erase and OTAFIX bootloader upgrade over USB (#6526)
1b40ca8: feat(firmware): add nRF52/RP2040 factory erase and OTAFIX bootloader upgrade over USB (#6526)
0c79680: fix(lora): validate 2.4 GHz bandwidth options (#6529)
cf3cc1c: chore(deps): update kotlin-toolchain to v2.3.11 (#6562)
c36afc4: chore: Scheduled updates (Firmware, Hardware, Translations) (#6563)
3d9bbec: fix(icons): differentiate google/fdroid debug launcher icons (#6564)
04c368e: chore: Scheduled updates (Firmware, Hardware, Translations) (#6570)
099fd7f: chore: Scheduled updates (Firmware, Hardware, Translations) (#6582)
8000adb: chore(deps): update detekt to v2.0.0-alpha.6 (#6585)
a885127: chore(deps): update io.nlopez.compose.rules:detekt to v0.6.4 (#6588)
774c937: chore(deps): update org.junit.vintage:junit-vintage-engine to v6.1.3 (#6594)
ca1ef74: build: vendor secrets-gradle-plugin with an Isolated-Projects fix (#6595)
f7a52f2: chore(deps): update vico to v3.3.0-next.2 (#6596)
34896a4: chore(deps): update xmlutil to v1.0.2 (#6597)
7a42a34: feat(settings): export the node database as JSON (#6610)
c6f62ba: fix(ui): add MQTT context to channel uplink/downlink toggle labels (#6614)
492a5c7: fix(ui): add MQTT context to channel uplink/downlink toggle labels (#6614)
884ab5d: fix(ui): add MQTT context to channel uplink/downlink toggle labels (#6614)
80f91b3: fix(mqtt): isolate overlapping client sessions (#6616)
92efb53: fix(service): await persisted device before boot reconnect (#6617)
ca20c27: fix(service): await persisted device before boot reconnect (#6617)
3489167: fix(service): await persisted device before boot reconnect (#6617)
b4bedd9: fix(settings): restore channels from device profiles (#6618)
9aefdeb: fix(android): preserve shared text in deep links (#6619)
b334362: fix(android): preserve shared text in deep links (#6619)
75f6356: fix(android): preserve shared text in deep links (#6619)
99e8cd8: fix(node): stop compass updates while backgrounded (#6620)
89b32d5: fix(node): stop compass updates while backgrounded (#6620)
188ad41: fix(usb): validate permission callbacks (#6622)
ebb7764: fix(usb): validate permission callbacks (#6622)
fd8414a: fix(database): delete nodes and metadata atomically (#6623)
5633ac6: fix(database): delete nodes and metadata atomically (#6623)
c005d24: fix(database): delete nodes and metadata atomically (#6623)
0c98de8: fix(ci): sync Flatpak Gradle distribution (#6625)
e2ba12f: fix(ci): sync Flatpak Gradle distribution (#6625)
a087274: chore(deps): update kotest to v6.2.4 (#6626)
a6eb2c6: docs: update CHANGELOG.md (#6627)
40413be: fix(i18n): localize emoji picker strings (#6628)
f337966: fix(i18n): localize emoji picker strings (#6628)
08a1965: fix(ui): locale-aware unit formatting and message-view font scaling (design audit) (#6629)
b517af6: fix(messaging): time out orphaned "Sending..." messages into a retryable failure (#6630)
5c330cc: fix(ui): stop emoji picker clipping text at large font scales (#6631)
df68570: chore: remove orphaned SatelliteCountInfo composable (#6633)
5a69ac1: chore: remove orphaned SatelliteCountInfo composable (#6633)
c159724: chore: remove orphaned SatelliteCountInfo composable (#6633)
b5e656e: fix(node): chart environment metrics in the user's display units (#6634)
35e2abb: fix(map): open Site Planner for the selected node (#6640)
911a580: chore: Scheduled updates (Firmware, Hardware, Translations) (#6643)
94ceaa6: fix(settings): show REDACTED for a remote node's withheld private key (#6649)
bc7634b: fix(ui): restore bottom time-axis height at large font scales (#6656)
4f86b91: fix(analytics): cover local firmware sideloads and report message_send in the foreground (#6660)
79019a3: reland(deps): bump the Compose stack to CMP 1.12.0-rc01 (#6672)
e330442: feat(node): surface incomplete nodes with a badge and show them by default (#6673)
ab1064b: chore: Scheduled updates (Graphs, Baseline Profile) (#6686)
42b07b2: chore(build): bump flatpak-sources plugin to 0.1.7, drop Isolated Projects workaround (#6690)
2238771: fix(build): track compose-multiplatform's actual version in the flatpak arm64 force-resolve (#6694)
c52b078: fix(deps): update takpacket-sdk to v0.9.0 (#6695)
f6774fc: chore: Scheduled updates (Firmware, Hardware, Translations) (#6696)
0de3555: fix(build): declare navigationevent-compose explicitly, fixing Dokka's metadata compile (#6698)
c8d9795: feat(node): label SNR quality on the Node Details signal row (#6703)
7ba54a8: fix(lora): keep a deliberately pinned preset at fresh setup (#6710)
ee2f6d8: fix(lora): keep a deliberately pinned preset at fresh setup (#6710)
06aee11: feat(lora): honor a pinned-preset intent advertised for UNSET (#6711)
3f0775d: feat(lora): honor a pinned-preset intent advertised for UNSET (#6711)
8a2bcdc: feat(lora): honor a pinned-preset intent advertised for UNSET (#6711)
80feda2: chore: Scheduled updates (Graphs, Baseline Profile) (#6714)
84bc6fd: fix(admin): retain session refresh across multi-hop latency (#6718)
ae7eaa6: fix(network): handle IPv6 mDNS addresses correctly, refresh on re-announce (#6729)
ff7653a: fix(barcode): narrow the F-Droid scanner to QR-only (#6731)
2d1dc59: fix(takserver): wire TAKPacket-SDK's logger, surface remarks-stripped (#6736)
6cd7a32: fix(map): scope Google Maps clustering to the viewport above 1000 nodes (#6739)
3796787: fix(database): raise default cache limit and warn before eviction (#6742)
2966a5b: fix(connections): open the region picker directly from the region card (#6743)
7bc6722: fix(node): confirm before clearing a node's position track (#6745)
9dd30be: fix(node): confirm before clearing a node's position track (#6745)
65a1f5c: fix(takserver): route TAK self-test through the real v1/v2 dispatch path (#6746)
bad267b: fix(takserver): route TAK self-test through the real v1/v2 dispatch path (#6746)
7b84f28: chore: Scheduled updates (Graphs, Baseline Profile) (#6748)
0c3e4d2: chore: Scheduled updates (Firmware, Hardware, Translations) (#6749)
23dc93b: chore(deps): update spotless to v8.10.0 (#6751)
c0b9864: chore(deps): update org.meshtastic:protobufs to v2.7.26.145-gc9cb9ef-snapshot (#6752)
2df817d: fix(node): make node-list search case-insensitive for non-ASCII names (#6753)
df402c5: chore: Scheduled updates (Firmware, Hardware, Translations) (#6755)
4c2c66a: fix: derive temperature unit from locale temperature preference, not distance system (#6775)
cd9ca5a: fix(ci): use PRs instead of direct push for changelog updates
69c1444: chore(build): centralize navigation3-ui and foundation in feature convention plugin
9d8dba3: fix: align proto submodule with main (a0a2239)
7683b91: refactor(node): fetch device links from the API, drop the bundled matcher
6bc8c65: fix(firmware): surface error state when BLE OTA connection attempts are exhausted
02456d2: fix(docs): use relative paths for screenshot images
d43f697: fix(database): make withDb retry logic resilient to varying close messages
f826877: chore(proto): prune new Marti message from Wire codegen
a1bff69: spotless
6de8c35: fix: use single-shot low battery notifications
06e5d93: style: apply spotless formatting to KermitLogEngine
037e3f5: fix(node): restore long-press context menu after navigation
f79e2ae: refactor: replace blocking suspend with staleWhileRevalidateFlow
9851f7b: refactor(nav): consolidate 4 remaining Graph route types
70e4a07: fix: show loading overlay immediately for remote config sub-screens
7c77579: refactor: remove in-tree flatpak-ops, migrate to gradle-flatpak-sources 0.1.1
0f62b02: refactor(flatpak): modernize plugin for strict Gradle validation
8cf1b96: fix(test): resolve Wire @JvmField ADAPTER androidHostTest failures
072e57e: feat(nav): rename tab labels Conversations→Messages, Connections→Connect
bc99a28: fix: add NodeRequestActions to NodeListViewModelTest
af81238: fix(settings): rename UDP toggle label from 'Enabled' to 'UDP broadcasting'
7749523: docs: update settings-validation spec for bandwidth dropdown
7b56c4b: build: bump takpacket-sdk to 0.5.3 and scope it to jvmAndroidMain
24e1a42: style: drop now-unused DataPacket import in AiFunctionProvider
3352e69: fix: hide battery indicator when level is 0 (never reported)
5015c16: fix(ci): unblock Dokka documentation generation
84c6749: fix(connections): extract isPhysicalDevice to satisfy detekt ComplexCondition
7c6a6cc: docs: update CHANGELOG.md (#6760)
95808c1: fix(messaging): use mesh time for message timestamps and grouping
c51d62f: Detekt
d62bc6e: fix(mqtt): scope user-CA trust to the MQTT connection
9b6cb4e: Use TextFieldState
5e94a20: refactor(firmware): dedupe the Android/JVM download byte-copy loop
1841f31: chore(renovate): group ui-text-google-fonts with the Compose stack
1230c36: feat(settings): implement set_ham_mode HamParameters admin message (#5780)
c7c2f1a: Rename org.meshtastic.desktop -> org.meshtastic.MeshtasticDesktop
0861c25: chore(deps): update aboutlibraries to v15.0.2
ddef08d: chore(deps): update actions/checkout action to v6
2a019bd: chore(deps): update actions/checkout action to v7
d9c7f78: chore(deps): update actions/deploy-pages action to v5
ebc1b6b: chore(deps): update actions/github-script action to v9
f17e586: chore(deps): update actions/setup-java action to v5
08db016: chore(deps): update actions/stale action to v10.4.0
d4ad0d9: chore(deps): update actions/stale action to v11
2af85ef: chore(deps): update agp to v9.3.1
31d3bc0: chore(deps): update androidx.compose.ui:ui-text-google-fonts to v1.12.0
2a6fd9f: chore(deps): update androidx.compose.material
0883923: chore(deps): update androidx.core:core-location-altitude to v1.0.0
626edf1: chore(deps): update androidx.appcompat:appcompat to v1.8.0
58d6c0b: fix(appfunctions): migrate off discontinued appfunctions-service artifact
fe14acf: chore(deps): update benchmark to v1.5.0-rc01
ce16e0a: chore(deps): update codecov/codecov-action action to v7
9fe1a28: chore(deps): update coil to v3.5.0
11a4033: chore(deps): update com.android.tools:common to v32.3.1
8887e50: chore(deps): update com.github.luben:zstd-jni to v1.5.7-11
8387da1: chore(deps): update com.github.mik3y:usb-serial-for-android to v3.11.0
f49c008: chore(deps): update com.google.android.gms:play-services-location to v21.4.0
27df63f: chore(deps): update com.google.firebase:firebase-ai-ondevice to v16.0.0-beta05
b37c20a: chore(deps): update com.google.firebase:firebase-bom to v34.18.0
5669b74: chore(deps): update plugin com.gradle.develocity to v4.4.3
d306fa4: chore(deps): update compose-multiplatform to v1.12.0
b14be9e: chore(deps): update compose.screenshot to v0.0.1-alpha16
7d35aab: chore(deps): update core/proto/src/main/proto digest to 3b9f5a9
3b06272: chore(deps): update datadog.gradle to v1.30.0
46513da: chore(deps): update dd.sdk.android to v3.12.1
3cfd5d9: chore(deps): update detekt to v2.0.0-alpha.6
ad72026: chore(deps): update develocity to v4.4.3
d4dc1ed: chore(deps): update fastlane to v2.238.0
de90f5c: chore(deps): update firebase.crashlytics.gradle to v3.0.8
874cbe3: chore(deps): update gradle to v9.7.1
3f9e6c0: chore(deps): update io.nlopez.compose.rules:detekt to v0.6.4
c66793e: chore(deps): update jetbrains.lifecycle to v2.11.0
71ffe99: chore(deps): update org.junit.platform:junit-platform-launcher to v6.1.3
1020272: chore(deps): update org.junit.vintage:junit-vintage-engine to v6.1.3
1028dcb: chore(deps): update com.juul.kable:kable-core to v0.44.3
2cf8845: chore(deps): update koin to v4.2.2
a618f69: chore(deps): update koin.plugin to v1.0.0
518062e: chore(deps): update kotest to v6.2.4
b6dc977: chore(deps): update kotlin to v2.4.0
ea39a60: chore(deps): update kotlin-toolchain to v2.3.11
38f0451: chore(deps): update kover to v0.9.9
be04f40: chore(deps): update ktor to v3.5.2
fb9d522: chore(deps): update lifecycle to v2.11.0
e57c85b: chore(deps): update aboutlibraries to v15
85de7e9: fix(takserver): move repairNamespaces to top-level XML config for xmlutil 1.0.0
9e97fd3: chore(deps): update maps.compose to v8.4.0
c0cb8ae: chore(deps): update markdownrenderer to v0.44.0
693a5d4: chore(deps): update org.meshtastic:protobufs to v2.7.26.151-gef0ae57-snapshot
e87f035: chore(deps): update com.google.mlkit:genai-prompt to v1.0.0-beta4
34caa73: chore(deps): update mokkery to v3.4.1
7e528f6: chore(deps): update org.meshtastic:mqtt-client-bom to v0.8.1
5a8f496: chore(deps): update net.java.dev.jna:jna to v5.19.1
2588b4f: chore(deps): update node to v24
c52197b: chore(deps): update com.squareup.okio:okio to v3.18.1
3921b5d: chore(deps): update org.jetbrains.kotlin:kotlin-stdlib-jdk8 to v1.9.25
581deea: chore(deps): update org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.5.1
dd4eec7: chore(deps): update plugin org.meshtastic.flatpak.sources.settings to v0.1.7
4b7bdb3: chore(deps): update androidx.paging:paging-common to v3.5.1
99d3ece: chore(deps): update com.guardsquare:proguard-gradle to v7.9.1
dceac31: chore(deps): update room to v3.0.1
5e82eef: chore(deps): update ruby to v4.0.6
883e98c: chore(deps): update spotless to v8.10.0
d70ab3b: fix(takserver): drop removed TakTalkRoomData.senderCallsign forward
bc7cc5b: chore(deps): update testretry to v1.6.5
6a3c917: chore(deps): update tuist/xcodeproj to v9
1912024: chore(deps): update vico to v3.3.0
3cf24c6: chore(deps): update wire to v6.4.0
52fe5b5: chore(deps): update xmlutil to v1.0.2
0eb9553: docs(deps): correct the CMP block rule's failure count to 8
a555961: chore: Scheduled updates (Graphs, Baseline Profile)
947f56c: chore: Scheduled updates (Firmware, Hardware, Translations)
b093f40: Enhance TAKTALK support with message and room handling, update SDK to v0.3.2
b209263: Bump takpacket; prune proto
c3be3f2: checkout protos from tom's PR
be3f882: wip
cf683a4: update: app icons with density-specific mipmap PNGs, dedicated monochrome layer, and refreshed desktop/Play Store assets
Served by rngit 1.4.2 - Generated in 3.69s